package cn.yunyichina.openapi.proxy.utils;

import java.util.HashMap;
import java.util.Map;

import cn.yunyichina.openapi.proxy.entity.Response;
import cn.yunyichina.utils.convert.JsonUtils;
import cn.yunyichina.utils.security.Base64Method;

import com.alibaba.dubbo.rpc.service.GenericService;
import com.alibaba.fastjson.JSON;

/**
 * 
 *     
 * 项目名称：yyt-openapi-proxy    
 * 类名称：AuthorizeUtil    
 * 类描述：    
 * 创建人：zhangkewen    
 * 创建时间：2016年9月24日 上午9:47:04    
 * 修改人：zhangkewen    
 * 修改时间：2016年9月24日 上午9:47:04    
 * 修改备注：    
 * @version     
 *
 */
public class AuthorizeUtil {

    /**
    * 验证签名
    * @param httpParams
    * @return
     * @throws Exception 
    */
   public static Response validate(Map<String,String> httpParams) throws Exception{
       
       Response response=new Response();
       
       try{
    	   String serviceDefine="IAuthorize";
           if (!ServiceUtil.getDicServices().containsKey(serviceDefine)) {
	           	//重新加载
	           	ServiceUtil.reLoad(serviceDefine);
	   	        if (!ServiceUtil.getDicServices().containsKey(serviceDefine)){
	   	        	response = new Response("10", "没有该IAuthorize的服务，请注册到数据库");
	   	            return response;
	           	}
           }
           
           GenericService service = (GenericService)ServiceUtil.getDicServices().get(serviceDefine).getService();
           String jsonData=JSON.toJSONString(httpParams);
           
           Map<String,String> postParams=new HashMap<String,String>();
           postParams.put("data", Base64Method.encryptUrlSafeBase64(jsonData));
           postParams.put("method", "yyt.authorize.signature.validate");
           postParams.put("sessionid", httpParams.containsKey("sessionid")?httpParams.get("sessionid"):"");
           Object resObj=service.$invoke("callFromExternal", new String[] { "java.util.Map" }, new Object[]{postParams});
           response=JSON.parseObject(JSON.toJSONString(resObj),Response.class);
       }catch(Exception ex){
    	   response=new Response("10", "调用Authorize授权服务异常:"+ex.getMessage());
       }
      
       return response;
   }
}
